package cc.verywell.pureblock.net;

import java.io.Closeable;
import java.nio.ByteBuffer;

/**
* 
* Copyright 2019 TanYaqiu
* @author TanYaqiu 
* @address flat 601
* @date 2019年3月9日 下午10:10:53
*/
public interface Context extends Closeable{

//	public Context() {
//		
//	}
	
	/**
	 * 解包线程，这里出错会关掉channel;
	 * @param bb
	 * @return
	 */
	public Msg decode(ByteBuffer bb,NormalSession nc);
//	{ //要根据已经共识的协议读取包
//		if(Pblog.DEBUG)Pblog.printDEBUG("context decode ");
//		return null;
//	}
	void encode(Msg msg,NormalSession nc,ByteBuffer bb);

	
	/**
	 * 返回true 会暂停读包, 
	 * 可以通过 NormalSession.startRead()恢复读包;
	 * 留意TimeOut,TimeoutRunner依然会自动断开连接的;
	 * @param Msg msg
	 * @param NormalSession nc
	 * @return true PauseRead;
	 */
	public boolean toDo(Msg msg,NormalSession nc);
//	{ 
//		if(Pblog.DEBUG)Pblog.printDEBUG("context toDo ",nc);
//		//msg.doit(nc); //TODO 未来建了包要扔到这里统一 处理，别再占用IO线程了。
//		return false; //如果返回true，那边会停止读包，直到NormalSession.startRead;
//	}
	
	/**
	 * TODO 根context可能会在 newSession之前收到decode和toDo;
	 * @param nc
	 */
	public void newSession(NormalSession nc);
//	{
//		if(Pblog.DEBUG)Pblog.printDEBUG("context newSession ",nc);
//	}
	
	public void closeSession(NormalSession nc);
//	{
//		if(Pblog.DEBUG)Pblog.printDEBUG("context closeSession ",nc);
//	}
	
	public void sessionTimeout(NormalSession nc);
//	{
//		if(Pblog.DEBUG)Pblog.printDEBUG("context sessionTimeout ",nc);
//	}

	


	public void close();
//	{
//		if(Pblog.DEBUG)Pblog.printDEBUG("context close ");
////		if(mainWorker!=null)try {mainWorker.shutdown();}finally {mainWorker=null;}
//	}
	
}
